package com.lfg.leetcode.leetcode0;


import java.util.HashMap;
import java.util.Map;

public class No36IsValidSudoku {


    public static boolean isValidSudoku(char[][] board) {
        Map<String, Integer[]> data = new HashMap<String, Integer[]>();

        for (int i = 0; i < board.length; i++) {
            Integer[] rows = new Integer[9];
            for (int j = 0; j < board[i].length; j++) {
                int num = board[i][j];
                if (46 == num) {
                    continue;
                }
                num = num - 49;
                if (num < 0 || num > 9) {
                    return false;
                }
                String ckey = "c_" + j;
                Integer[] columns = data.getOrDefault(ckey, new Integer[9]);
                if (columns[num] != null) {
                    return false;
                }
                if (rows[num] != null) {
                    return false;
                }
                String mkey = String.valueOf(i / 3) + '_' + j / 3;
                Integer[] middle = data.getOrDefault(mkey, new Integer[9]);
                if (middle[num] != null) {
                    return false;
                }
                rows[num] = num;
                columns[num] = num;
                middle[num] = num;
                data.put(mkey, middle);
                data.put(ckey, columns);
            }
        }
        return true;
    }

    public static void main(String[] args) {


        char[][] array = new char[9][9];
        array[0] = new char[]{'5', '3', '4', '6', '7', '8', '9', '1', '2'};
        array[1] = new char[]{'6', '.', '.', '1', '9', '5', '.', '.', '.'};
        array[2] = new char[]{'.', '9', '8', '.', '.', '.', '.', '6', '.'};
        array[3] = new char[]{'8', '.', '.', '.', '6', '.', '.', '.', '3'};
        array[4] = new char[]{'4', '.', '.', '8', '.', '3', '.', '.', '1'};
        array[5] = new char[]{'7', '.', '.', '.', '2', '.', '.', '.', '6'};
        array[6] = new char[]{'.', '6', '.', '.', '.', '.', '2', '8', '.'};
        array[7] = new char[]{'.', '.', '.', '4', '1', '9', '.', '.', '5'};
        array[8] = new char[]{'.', '.', '.', '.', '8', '.', '.', '7', '9'};
//        int ret = search(new int[]{9,10,11,0,1,2, 3,4,5,6,7,8},1);
        boolean ret = isValidSudoku(array);
        System.out.println(ret);
//        System.out.println(Integer.valueOf('9'));
    }
}

